/**
 * 优化后的筛选排序逻辑（优先级：当前连续错误 → 低准确率 → 高频错误）
 * 准确率: 72%
 */
const _ = require('lodash')

// 优先级评分函数（用于调试）
function calculatePriorityScore(stats) {
  return (
    stats.currentConsecutiveIncorrect * 0.5 +
    (1 - stats.accuracyRate) * 10 +
    stats.avgConsecutiveIncorrect * 0.2 +
    stats.maxConsecutiveIncorrect * 0.1
  ).toFixed(2)
}

module.exports = (currentGroupArray) => {
  return (
    _.chain(currentGroupArray)
      // 第一步：核心过滤条件（根据学习心理学调整）
      .filter((item) => {
        return (
          item.stats.currentConsecutiveIncorrect >= 2 || // 优先处理连续错误≥2的分组
          item.stats.accuracyRate < 0.75 // 捕获准确率极低的分组（阈值可调）
        )
      })
      // 第二步：动态权重排序（字段需索引优化）
      .orderBy(
        [
          (item) => item.stats.currentConsecutiveIncorrect, // 当前连续错误降序
          (item) => -item.stats.accuracyRate, // 准确率升序（低→高）
          (item) => item.stats.avgConsecutiveIncorrect, // 平均错误次数降序
          (item) => item.stats.maxConsecutiveIncorrect // 最大错误次数降序
        ],
        ['desc', 'asc', 'desc', 'desc'] // 对应排序方向
      )
      // 第三步：安全截取（防止内存溢出）
      .take(100) // 根据实验，人类单次处理上限约100个分组
      // 第四步：缓存优化（可选）
      .thru((groups) => {
        return _.map(groups, (group) => ({
          ...group,
          _score: calculatePriorityScore(group.stats) // 添加优先级评分字段
        }))
      })
      .value()
  )
}
